package com.atguigu.gmall.apps

import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * @ClassName: baseApp
  * @Description:
  * @Author: kele
  * @Date: 2021/3/17 18:41
  *
  *
  *根据需求（4个），要对数据进行处理，需要获取kafka的数据，所以将kafka的数据作为一个控制抽象，都可以调用
  *
  * 使用控制抽象的方法
  **/

/**
  *  模板类的功能：1、获取StreamingContext，
  *              2、（外部传入逻辑）
  *              3、启动，阻塞运行
  *
  */
abstract class baseApp {

  val AppName:String
  val time:Int
  var streamingContext:StreamingContext = null

  def runApp(op: => Unit)={

    val conf = new SparkConf().setAppName(AppName).setMaster("local[*]")

    streamingContext = new StreamingContext(conf,Seconds(time))

    try{

      //处理业务的逻辑
      op

    }catch {
      case ex:Exception=> println(ex.getMessage)
    }


    //启动streaming
    streamingContext.start()

    //阻塞进程，一致运行获取数据
    streamingContext.awaitTermination()

  }
}
